package edu.nf.ch10.demo2;

import java.util.Arrays;
import java.util.Iterator;

/**
 * @author wangl
 * @date 2025/4/17
 * 过滤链（管理所有过滤器的执行，以及是否放行）
 */
public class FilterChain {

    /**
     * 声明一个迭代器，迭代所有的过滤器
     */
    private Iterator<Filter> iterator;

    /**
     * 在构造方法中初始化所有的过滤器
     */
    public FilterChain() {
        iterator = Arrays.asList(
                new FilterA(),
                new FilterB(),
                new FilterC()).iterator();
    }

    /**
     * 放行方法
     * 实现放行逻辑
     * @param request
     * @param response
     */
    public void doFilter(ServletRequest request, ServletResponse response) {
        //如果迭代器中存在下一个过滤器
        if(iterator.hasNext()) {
            //从迭代器中取出来执行
            Filter filter = iterator.next();
            filter.doFilter(request, response, this);
        }
    }
}